/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.    
*/

namespace NVelocity.Runtime.Parser.Node
{
	using System;

    /// <summary> Interface used in implementation of visitor pattern.  Based on
    /// code autogenerated by JavaCC. Formerly found in package
    /// org.apache.velocity.runtime.parser.
    /// 
    /// </summary>
    /// <version>  $Id: ParserVisitor.java 685685 2008-08-13 21:43:27Z nbubna $
    /// </version>
    /// <since> 1.5
    /// </since>
    public interface IParserVisitor
    {
        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(SimpleNode node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTprocess node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTEscapedDirective node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTEscape node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTComment node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTFloatingPointLiteral node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTIntegerLiteral node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTStringLiteral node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTIdentifier node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTWord node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTDirective node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTBlock node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTMap node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTObjectArray node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTIntegerRange node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTMethod node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTReference node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTTrue node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTFalse node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTText node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTIfStatement node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTElseStatement node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTElseIfStatement node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTSetDirective node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTStop node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTExpression node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTAssignment node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTOrNode node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTAndNode node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTEQNode node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTNENode node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTLTNode node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTGTNode node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTLENode node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTGENode node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTAddNode node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTSubtractNode node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTMulNode node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTDivNode node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTModNode node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
        object Visit(ASTNotNode node, object data);

        /// <param name="node">
        /// </param>
        /// <param name="data">
        /// </param>
        /// <returns> The object rendered by this node.
        /// </returns>
    }
}